package com.chunlin.inheritance;

import com.chunlin.package1.C;
import com.chunlin.package1.D;

public class Inheritance {
    public static void test1() {
        Derived derived = new Derived();
//        derived.method();
//        derived.methodC();
        derived.methodD();
    }

    public static void test2() {
        //1. 静态代码块先执行，并且只执行一次，在类加载阶段执行
        //2. 当有对象创建时，才会执行实例代码块，实例代码块执行完成后，最后构造方法执行
        Person person1 = new Person("xiaolei",10);
        System.out.println("============================");
        Person person2 = new Person("kaige",20);
    }

    public static void test3() {
        Student student1 = new Student("xinhang",19);
        System.out.println("===========================");
        Student student2 = new Student("yaofeng",20);
        System.out.println("===========================");
        Person person1 = new Person("xiaolei",10);
        System.out.println("============================");
        Person person2 = new Person("kaige",20);

        //通过分析执行结果，得出以下结论：
        //1、父类静态代码块优先于子类静态代码块执行，且是最早执行
        //2、父类实例代码块和父类构造方法紧接着执行
        //3、子类的实例代码块和子类构造方法紧接着再执行
        //4、第二次实例化子类对象时，父类和子类的静态代码块都将不会再执行
    }

    public static void test4() {
        B b = new B();
        b.method();

        C c = new C();
        c.method();

        D d = new D();
        d.method();

        //修饰变量或字段，表示常量(即不能修改)
        //final int a = 10;
        //a = 20;
    }

    public static void main(String[] args) {
//        test1();
//        test2();
//        test3();
        test4();
    }
}
